package Demo40;
/*
向上转型一定是安全的、没有问题的、正确、但也有一个弊端，
对象 一旦向上转型为父类，那么就无法调用子类原本特有的内容

解决方案：用对象的向下转型【还原】
 */
public class Demo01Main {
    public static void main(String[] args) {
        //对象的向上转型，就是。父类引用指向子类对象
        /*
        格式：
        父类名称 对象名 =new 子类名称（）；
        含义：右侧创建一个子类对象，把它当作父类来看待使用
        类似于：
        double num=100;//正确
        int----> double;自动类型转换
         */
        Animal animal =new Cat();
        animal.eat();//猫吃鱼

//        animal.catchMouse();//错误写法

        //向下转型，进行”还原“动作
        Cat cat =(Cat) animal;
        cat.catchMouse();//猫抓老鼠

        //下面是错误的向下转型
        //本来new的时候是一只猫，现在非要当做㺃
//        Dog dog =(Dog) animal;//ClassCastException:---------类转换异常

    }

    /*
    对象的向下转型，其实是一个【还原】的动作
    格式 ：
    子类名称 对象名 =（子类名称） 父类对象；
    含义：将父类对象，【还原】成为本来的子类对象
    Animal animal =new Cat(); //本来是猫，向上转型成为动物
    Cat cat=(Cat) animal;//本来是猫，已经被当做动物了，还原回来成为本来的猫
     类似于：
     int num=(int) 10.0//可以
     int num=(int) 10.5//不可以 精度损失
     */
}
